frathom

Homework2 Part 1 and Part 2

In [1]:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision.transforms as transforms
import torchvision
from torch.autograd import Variable
import matplotlib.pyplot as plt
import numpy as np
from google.colab import drive
import helper
from torch.utils.data.sampler import SubsetRandomSampler
from torch.utils.data import TensorDataset
import glob
import librosa
import math
In [2]:
import IPython.display as ipd
In [3]:
if torch.cuda.is_available():
  device = torch.device("cuda")
else:
  device = torch.device("cpu")
In [4]:
print(torch.cuda.is_available())
True
In [5]:
#### Part 1
In [6]:
from google.colab import files
uploaded = files.upload()
Upload widget is only available when the cell has been executed in the current browser session. Please rerun this cell to enable.
Saving test_x_01.wav to test_x_01.wav
Saving test_x_02.wav to test_x_02.wav
Saving train_clean_male.wav to train_clean_male.wav
Saving train_dirty_male.wav to train_dirty_male.wav
In [7]:
clean, srate=librosa.load('train_clean_male.wav', sr=None)
S_st=librosa.stft(clean, n_fft=1024, hop_length=512)
noisy, srate=librosa.load('train_dirty_male.wav', sr=None)
X_st=librosa.stft(noisy, n_fft=1024, hop_length=512)
In [8]:
S_st.shape
Out[8]:
(513, 2459)
In [9]:
S_abs=np.abs(S_st)
X_abs=np.abs(X_st)
In [10]:
S= torch.tensor(np.transpose(S_abs)).cuda()
X = torch.tensor(np.transpose(X_abs)).cuda()
In [11]:
class CNN_problem1(nn.Module):
  def __init__(self):
    super(CNN_problem1,self).__init__()
    self.first_conv=nn.Conv1d(1,10,kernel_size=5,stride=1)
    nn.init.xavier_normal_(self.first_conv.weight)
    self.relu=nn.ReLU()
    self.pooling=nn.AvgPool1d(kernel_size=2,stride=2)
    self.second_conv=nn.Conv1d(10,10,kernel_size=5,stride=1)
    nn.init.xavier_normal_(self.second_conv.weight)
    self.fc1=nn.Linear(125*10,900)
    nn.init.xavier_normal_(self.fc1.weight)
    self.fc2=nn.Linear(900,513)
    nn.init.xavier_normal_(self.fc2.weight)
  
  def Forward_prop(self,x):
    x = x[:, np.newaxis,:]
    x1=self.pooling(self.relu(self.first_conv(x)))
    x2=self.pooling(self.relu(self.second_conv(x1)))
    x2=x2.reshape(x2.shape[0],-1)
    x3=self.relu(self.fc1(x2))
    out=self.relu(self.fc2(x3))
    return out
In [12]:
cnn_model1=CNN_problem1().cuda()
In [13]:
loss=nn.MSELoss()
param=cnn_model1.parameters()
optimize=torch.optim.Adam(param,lr=0.001)
batch_num=500
In [14]:
def train_model():
  for i in range(0,len(X),batch_num):
    X_batch=X[i:i+batch_num]
    S_batch=S[i:i+batch_num]
    ff_out=cnn_model1.Forward_prop(X_batch.cuda())
    optimize.zero_grad()
    losses=loss(ff_out,S_batch.cuda())
    losses.backward()
    optimize.step()
  return losses.data
In [15]:
training_loss=[]
for i in range(600):
  tr_l=train_model()
  training_loss.append(tr_l)
  print("epoch {} is done".format(i))
epoch 0 is done
epoch 1 is done
epoch 2 is done
epoch 3 is done
epoch 4 is done
epoch 5 is done
epoch 6 is done
epoch 7 is done
epoch 8 is done
epoch 9 is done
epoch 10 is done
epoch 11 is done
epoch 12 is done
epoch 13 is done
epoch 14 is done
epoch 15 is done
epoch 16 is done
epoch 17 is done
epoch 18 is done
epoch 19 is done
epoch 20 is done
epoch 21 is done
epoch 22 is done
epoch 23 is done
epoch 24 is done
epoch 25 is done
epoch 26 is done
epoch 27 is done
epoch 28 is done
epoch 29 is done
epoch 30 is done
epoch 31 is done
epoch 32 is done
epoch 33 is done
epoch 34 is done
epoch 35 is done
epoch 36 is done
epoch 37 is done
epoch 38 is done
epoch 39 is done
epoch 40 is done
epoch 41 is done
epoch 42 is done
epoch 43 is done
epoch 44 is done
epoch 45 is done
epoch 46 is done
epoch 47 is done
epoch 48 is done
epoch 49 is done
epoch 50 is done
epoch 51 is done
epoch 52 is done
epoch 53 is done
epoch 54 is done
epoch 55 is done
epoch 56 is done
epoch 57 is done
epoch 58 is done
epoch 59 is done
epoch 60 is done
epoch 61 is done
epoch 62 is done
epoch 63 is done
epoch 64 is done
epoch 65 is done
epoch 66 is done
epoch 67 is done
epoch 68 is done
epoch 69 is done
epoch 70 is done
epoch 71 is done
epoch 72 is done
epoch 73 is done
epoch 74 is done
epoch 75 is done
epoch 76 is done
epoch 77 is done
epoch 78 is done
epoch 79 is done
epoch 80 is done
epoch 81 is done
epoch 82 is done
epoch 83 is done
epoch 84 is done
epoch 85 is done
epoch 86 is done
epoch 87 is done
epoch 88 is done
epoch 89 is done
epoch 90 is done
epoch 91 is done
epoch 92 is done
epoch 93 is done
epoch 94 is done
epoch 95 is done
epoch 96 is done
epoch 97 is done
epoch 98 is done
epoch 99 is done
epoch 100 is done
epoch 101 is done
epoch 102 is done
epoch 103 is done
epoch 104 is done
epoch 105 is done
epoch 106 is done
epoch 107 is done
epoch 108 is done
epoch 109 is done
epoch 110 is done
epoch 111 is done
epoch 112 is done
epoch 113 is done
epoch 114 is done
epoch 115 is done
epoch 116 is done
epoch 117 is done
epoch 118 is done
epoch 119 is done
epoch 120 is done
epoch 121 is done
epoch 122 is done
epoch 123 is done
epoch 124 is done
epoch 125 is done
epoch 126 is done
epoch 127 is done
epoch 128 is done
epoch 129 is done
epoch 130 is done
epoch 131 is done
epoch 132 is done
epoch 133 is done
epoch 134 is done
epoch 135 is done
epoch 136 is done
epoch 137 is done
epoch 138 is done
epoch 139 is done
epoch 140 is done
epoch 141 is done
epoch 142 is done
epoch 143 is done
epoch 144 is done
epoch 145 is done
epoch 146 is done
epoch 147 is done
epoch 148 is done
epoch 149 is done
epoch 150 is done
epoch 151 is done
epoch 152 is done
epoch 153 is done
epoch 154 is done
epoch 155 is done
epoch 156 is done
epoch 157 is done
epoch 158 is done
epoch 159 is done
epoch 160 is done
epoch 161 is done
epoch 162 is done
epoch 163 is done
epoch 164 is done
epoch 165 is done
epoch 166 is done
epoch 167 is done
epoch 168 is done
epoch 169 is done
epoch 170 is done
epoch 171 is done
epoch 172 is done
epoch 173 is done
epoch 174 is done
epoch 175 is done
epoch 176 is done
epoch 177 is done
epoch 178 is done
epoch 179 is done
epoch 180 is done
epoch 181 is done
epoch 182 is done
epoch 183 is done
epoch 184 is done
epoch 185 is done
epoch 186 is done
epoch 187 is done
epoch 188 is done
epoch 189 is done
epoch 190 is done
epoch 191 is done
epoch 192 is done
epoch 193 is done
epoch 194 is done
epoch 195 is done
epoch 196 is done
epoch 197 is done
epoch 198 is done
epoch 199 is done
epoch 200 is done
epoch 201 is done
epoch 202 is done
epoch 203 is done
epoch 204 is done
epoch 205 is done
epoch 206 is done
epoch 207 is done
epoch 208 is done
epoch 209 is done
epoch 210 is done
epoch 211 is done
epoch 212 is done
epoch 213 is done
epoch 214 is done
epoch 215 is done
epoch 216 is done
epoch 217 is done
epoch 218 is done
epoch 219 is done
epoch 220 is done
epoch 221 is done
epoch 222 is done
epoch 223 is done
epoch 224 is done
epoch 225 is done
epoch 226 is done
epoch 227 is done
epoch 228 is done
epoch 229 is done
epoch 230 is done
epoch 231 is done
epoch 232 is done
epoch 233 is done
epoch 234 is done
epoch 235 is done
epoch 236 is done
epoch 237 is done
epoch 238 is done
epoch 239 is done
epoch 240 is done
epoch 241 is done
epoch 242 is done
epoch 243 is done
epoch 244 is done
epoch 245 is done
epoch 246 is done
epoch 247 is done
epoch 248 is done
epoch 249 is done
epoch 250 is done
epoch 251 is done
epoch 252 is done
epoch 253 is done
epoch 254 is done
epoch 255 is done
epoch 256 is done
epoch 257 is done
epoch 258 is done
epoch 259 is done
epoch 260 is done
epoch 261 is done
epoch 262 is done
epoch 263 is done
epoch 264 is done
epoch 265 is done
epoch 266 is done
epoch 267 is done
epoch 268 is done
epoch 269 is done
epoch 270 is done
epoch 271 is done
epoch 272 is done
epoch 273 is done
epoch 274 is done
epoch 275 is done
epoch 276 is done
epoch 277 is done
epoch 278 is done
epoch 279 is done
epoch 280 is done
epoch 281 is done
epoch 282 is done
epoch 283 is done
epoch 284 is done
epoch 285 is done
epoch 286 is done
epoch 287 is done
epoch 288 is done
epoch 289 is done
epoch 290 is done
epoch 291 is done
epoch 292 is done
epoch 293 is done
epoch 294 is done
epoch 295 is done
epoch 296 is done
epoch 297 is done
epoch 298 is done
epoch 299 is done
epoch 300 is done
epoch 301 is done
epoch 302 is done
epoch 303 is done
epoch 304 is done
epoch 305 is done
epoch 306 is done
epoch 307 is done
epoch 308 is done
epoch 309 is done
epoch 310 is done
epoch 311 is done
epoch 312 is done
epoch 313 is done
epoch 314 is done
epoch 315 is done
epoch 316 is done
epoch 317 is done
epoch 318 is done
epoch 319 is done
epoch 320 is done
epoch 321 is done
epoch 322 is done
epoch 323 is done
epoch 324 is done
epoch 325 is done
epoch 326 is done
epoch 327 is done
epoch 328 is done
epoch 329 is done
epoch 330 is done
epoch 331 is done
epoch 332 is done
epoch 333 is done
epoch 334 is done
epoch 335 is done
epoch 336 is done
epoch 337 is done
epoch 338 is done
epoch 339 is done
epoch 340 is done
epoch 341 is done
epoch 342 is done
epoch 343 is done
epoch 344 is done
epoch 345 is done
epoch 346 is done
epoch 347 is done
epoch 348 is done
epoch 349 is done
epoch 350 is done
epoch 351 is done
epoch 352 is done
epoch 353 is done
epoch 354 is done
epoch 355 is done
epoch 356 is done
epoch 357 is done
epoch 358 is done
epoch 359 is done
epoch 360 is done
epoch 361 is done
epoch 362 is done
epoch 363 is done
epoch 364 is done
epoch 365 is done
epoch 366 is done
epoch 367 is done
epoch 368 is done
epoch 369 is done
epoch 370 is done
epoch 371 is done
epoch 372 is done
epoch 373 is done
epoch 374 is done
epoch 375 is done
epoch 376 is done
epoch 377 is done
epoch 378 is done
epoch 379 is done
epoch 380 is done
epoch 381 is done
epoch 382 is done
epoch 383 is done
epoch 384 is done
epoch 385 is done
epoch 386 is done
epoch 387 is done
epoch 388 is done
epoch 389 is done
epoch 390 is done
epoch 391 is done
epoch 392 is done
epoch 393 is done
epoch 394 is done
epoch 395 is done
epoch 396 is done
epoch 397 is done
epoch 398 is done
epoch 399 is done
epoch 400 is done
epoch 401 is done
epoch 402 is done
epoch 403 is done
epoch 404 is done
epoch 405 is done
epoch 406 is done
epoch 407 is done
epoch 408 is done
epoch 409 is done
epoch 410 is done
epoch 411 is done
epoch 412 is done
epoch 413 is done
epoch 414 is done
epoch 415 is done
epoch 416 is done
epoch 417 is done
epoch 418 is done
epoch 419 is done
epoch 420 is done
epoch 421 is done
epoch 422 is done
epoch 423 is done
epoch 424 is done
epoch 425 is done
epoch 426 is done
epoch 427 is done
epoch 428 is done
epoch 429 is done
epoch 430 is done
epoch 431 is done
epoch 432 is done
epoch 433 is done
epoch 434 is done
epoch 435 is done
epoch 436 is done
epoch 437 is done
epoch 438 is done
epoch 439 is done
epoch 440 is done
epoch 441 is done
epoch 442 is done
epoch 443 is done
epoch 444 is done
epoch 445 is done
epoch 446 is done
epoch 447 is done
epoch 448 is done
epoch 449 is done
epoch 450 is done
epoch 451 is done
epoch 452 is done
epoch 453 is done
epoch 454 is done
epoch 455 is done
epoch 456 is done
epoch 457 is done
epoch 458 is done
epoch 459 is done
epoch 460 is done
epoch 461 is done
epoch 462 is done
epoch 463 is done
epoch 464 is done
epoch 465 is done
epoch 466 is done
epoch 467 is done
epoch 468 is done
epoch 469 is done
epoch 470 is done
epoch 471 is done
epoch 472 is done
epoch 473 is done
epoch 474 is done
epoch 475 is done
epoch 476 is done
epoch 477 is done
epoch 478 is done
epoch 479 is done
epoch 480 is done
epoch 481 is done
epoch 482 is done
epoch 483 is done
epoch 484 is done
epoch 485 is done
epoch 486 is done
epoch 487 is done
epoch 488 is done
epoch 489 is done
epoch 490 is done
epoch 491 is done
epoch 492 is done
epoch 493 is done
epoch 494 is done
epoch 495 is done
epoch 496 is done
epoch 497 is done
epoch 498 is done
epoch 499 is done
epoch 500 is done
epoch 501 is done
epoch 502 is done
epoch 503 is done
epoch 504 is done
epoch 505 is done
epoch 506 is done
epoch 507 is done
epoch 508 is done
epoch 509 is done
epoch 510 is done
epoch 511 is done
epoch 512 is done
epoch 513 is done
epoch 514 is done
epoch 515 is done
epoch 516 is done
epoch 517 is done
epoch 518 is done
epoch 519 is done
epoch 520 is done
epoch 521 is done
epoch 522 is done
epoch 523 is done
epoch 524 is done
epoch 525 is done
epoch 526 is done
epoch 527 is done
epoch 528 is done
epoch 529 is done
epoch 530 is done
epoch 531 is done
epoch 532 is done
epoch 533 is done
epoch 534 is done
epoch 535 is done
epoch 536 is done
epoch 537 is done
epoch 538 is done
epoch 539 is done
epoch 540 is done
epoch 541 is done
epoch 542 is done
epoch 543 is done
epoch 544 is done
epoch 545 is done
epoch 546 is done
epoch 547 is done
epoch 548 is done
epoch 549 is done
epoch 550 is done
epoch 551 is done
epoch 552 is done
epoch 553 is done
epoch 554 is done
epoch 555 is done
epoch 556 is done
epoch 557 is done
epoch 558 is done
epoch 559 is done
epoch 560 is done
epoch 561 is done
epoch 562 is done
epoch 563 is done
epoch 564 is done
epoch 565 is done
epoch 566 is done
epoch 567 is done
epoch 568 is done
epoch 569 is done
epoch 570 is done
epoch 571 is done
epoch 572 is done
epoch 573 is done
epoch 574 is done
epoch 575 is done
epoch 576 is done
epoch 577 is done
epoch 578 is done
epoch 579 is done
epoch 580 is done
epoch 581 is done
epoch 582 is done
epoch 583 is done
epoch 584 is done
epoch 585 is done
epoch 586 is done
epoch 587 is done
epoch 588 is done
epoch 589 is done
epoch 590 is done
epoch 591 is done
epoch 592 is done
epoch 593 is done
epoch 594 is done
epoch 595 is done
epoch 596 is done
epoch 597 is done
epoch 598 is done
epoch 599 is done
In [16]:
plt.plot(list(range(600)),training_loss)
Out[16]:
[<matplotlib.lines.Line2D at 0x7f71c17f0828>]
In [17]:
s, sr=librosa.load('test_x_01.wav', sr=None)
X_t1=librosa.stft(s, n_fft=1024, hop_length=512)
xt1=librosa.stft(s, n_fft=1024, hop_length=512)
sa, sr=librosa.load('test_x_02.wav', sr=None)
X_t2=librosa.stft(sa, n_fft=1024, hop_length=512)
xt2=librosa.stft(sa, n_fft=1024, hop_length=512)
In [18]:
def test_model(x):
  with torch.no_grad():
    out=cnn_model1.Forward_prop(x)
  return out
In [19]:
def reconstruct(x,o_inp):
  test_out=test_model(x)
  test_out=test_out.cpu().numpy()
  x_den=x.cpu().numpy()
  S_hat=(o_inp.T/x_den)*test_out
  return S_hat
In [20]:
X_t1=np.abs(X_t1)
X_t1= torch.tensor(np.transpose(X_t1)).cuda()
In [21]:
X_t2=np.abs(X_t2)
X_t2= torch.tensor(np.transpose(X_t2)).cuda()
In [22]:
s1=reconstruct(X_t1,xt1)
In [23]:
s2=reconstruct(X_t2,xt2)
In [24]:
s1_re=librosa.istft(s1.T,hop_length=512,length =len(s))
s2_re=librosa.istft(s2.T,hop_length=512,length =len(sa))
In [25]:
librosa.output.write_wav('test_s_01_recons.wav', s1_re, sr)
librosa.output.write_wav('test_s_02_recons.wav', s2_re, sr)
In [26]:
train_n=reconstruct(X,X_st)
In [27]:
train_re=librosa.istft(train_n.T,hop_length=512,length =len(noisy))
In [28]:
librosa.output.write_wav('train_recons.wav', train_re, srate)
In [29]:
ipd.Audio('train_recons.wav') # reconstructed train signal
Out[29]:
In [30]:
ipd.Audio('test_s_01_recons.wav') # reconstructed test 1 signal
Out[30]:
In [31]:
ipd.Audio('test_s_02_recons.wav') # The reconstructed test 2 signal
Out[31]:
In [32]:
def SNR(cs, ds):
  cs,sr=librosa.load(cs, sr=None)
  ds,sr=librosa.load(ds, sr=None)
  A=np.dot(cs, cs.T)
  B=np.dot(cs-ds,(cs-ds).T)
  s=A/B
  snr=10*(np.log10(s))  
  return snr
In [33]:
SNR('train_dirty_male.wav', 'train_recons.wav')
Out[33]:
7.55933940410614

Some formulae used:

  1. To recover signal:
\begin{equation} \hat{S}=\frac{\boldsymbol{X}_{\text {test}}}{\left|\boldsymbol{X}_{\text {test}}\right|} \odot\left|\hat{\boldsymbol{S}}_{\text {test}}\right| \end{equation}
  1. To calculate SNR:
\begin{equation} \mathrm{SNR}=10 \log _{10} \frac{\sum_{t}(s(t))^{2}}{\sum_{t}(s(t)-\hat{s}(t))^{2}} \end{equation}

Part 2

In [34]:
from google.colab import files
uploaded = files.upload()
Upload widget is only available when the cell has been executed in the current browser session. Please rerun this cell to enable.
Saving test_x_01.wav to test_x_01 (1).wav
Saving test_x_02.wav to test_x_02 (1).wav
Saving train_clean_male.wav to train_clean_male (1).wav
Saving train_dirty_male.wav to train_dirty_male (1).wav
In [35]:
clean, srate=librosa.load('train_clean_male.wav', sr=None)
S_st=librosa.stft(clean, n_fft=1024, hop_length=512)
noisy, srate=librosa.load('train_dirty_male.wav', sr=None)
X_st=librosa.stft(noisy, n_fft=1024, hop_length=512)
In [36]:
S_abs=np.abs(S_st)
X_abs=np.abs(X_st)
In [37]:
# S= torch.tensor(np.transpose(S_abs)).cuda()
# X = torch.tensor(np.transpose(X_abs)).cuda()
In [38]:
def frames_creation(inp):
  out=[]
  length=inp.shape[0]-19
  for i in range(0,length):
    s_f=inp[i:i+20,:]
    out.append(s_f)
  return np.array(out)
In [39]:
S_frame=torch.tensor(frames_creation(np.transpose(S_abs))).cuda()
X_frame=torch.tensor(frames_creation(np.transpose(X_abs))).cuda()
In [40]:
S_frame.shape
Out[40]:
torch.Size([2440, 20, 513])
In [41]:
X_frame.shape
Out[41]:
torch.Size([2440, 20, 513])
In [42]:
class CNN_problem2(nn.Module):
  def __init__(self):
    super(CNN_problem2,self).__init__()
    self.first_conv=nn.Conv2d(1,10,kernel_size=5,stride=1)
    nn.init.xavier_normal_(self.first_conv.weight)
    self.relu=nn.ReLU()
    self.pooling=nn.AvgPool2d(kernel_size=2,stride=2)
    self.second_conv=nn.Conv2d(10,20,kernel_size=5,stride=1)
    nn.init.xavier_normal_(self.second_conv.weight)
    self.fc1=nn.Linear(125*20*2,900)
    nn.init.xavier_normal_(self.fc1.weight)
    self.fc2=nn.Linear(900,513)
    nn.init.xavier_normal_(self.fc2.weight)
  
  def Forward_prop(self,x):
    x = x[:, np.newaxis,:]
    x1=self.pooling(self.relu(self.first_conv(x)))
    x2=self.pooling(self.relu(self.second_conv(x1)))
    x2=x2.reshape(x2.shape[0],-1)
    x3=self.relu(self.fc1(x2))
    out=self.relu(self.fc2(x3))
    return out
In [43]:
cnn_model2=CNN_problem2().cuda()
In [44]:
loss=nn.MSELoss()
param=cnn_model2.parameters()
optimize=torch.optim.Adam(param,lr=0.001)
batch_num=500
In [45]:
def train_model():
  for i in range(0,len(X_frame),batch_num):
    X_batch=X_frame[i:i+batch_num,:,:]
    S_batch=S_frame[i:i+batch_num,:,:]
    ff_out=cnn_model2.Forward_prop(X_batch.cuda())
    optimize.zero_grad()
    losses=loss(ff_out,S_batch[:,19,:].cuda())
    losses.backward()
    optimize.step()
  return losses.data
In [46]:
training_loss=[]
for i in range(600):
  tr_l=train_model()
  training_loss.append(tr_l)
  print("epoch {} is done".format(i))
epoch 0 is done
epoch 1 is done
epoch 2 is done
epoch 3 is done
epoch 4 is done
epoch 5 is done
epoch 6 is done
epoch 7 is done
epoch 8 is done
epoch 9 is done
epoch 10 is done
epoch 11 is done
epoch 12 is done
epoch 13 is done
epoch 14 is done
epoch 15 is done
epoch 16 is done
epoch 17 is done
epoch 18 is done
epoch 19 is done
epoch 20 is done
epoch 21 is done
epoch 22 is done
epoch 23 is done
epoch 24 is done
epoch 25 is done
epoch 26 is done
epoch 27 is done
epoch 28 is done
epoch 29 is done
epoch 30 is done
epoch 31 is done
epoch 32 is done
epoch 33 is done
epoch 34 is done
epoch 35 is done
epoch 36 is done
epoch 37 is done
epoch 38 is done
epoch 39 is done
epoch 40 is done
epoch 41 is done
epoch 42 is done
epoch 43 is done
epoch 44 is done
epoch 45 is done
epoch 46 is done
epoch 47 is done
epoch 48 is done
epoch 49 is done
epoch 50 is done
epoch 51 is done
epoch 52 is done
epoch 53 is done
epoch 54 is done
epoch 55 is done
epoch 56 is done
epoch 57 is done
epoch 58 is done
epoch 59 is done
epoch 60 is done
epoch 61 is done
epoch 62 is done
epoch 63 is done
epoch 64 is done
epoch 65 is done
epoch 66 is done
epoch 67 is done
epoch 68 is done
epoch 69 is done
epoch 70 is done
epoch 71 is done
epoch 72 is done
epoch 73 is done
epoch 74 is done
epoch 75 is done
epoch 76 is done
epoch 77 is done
epoch 78 is done
epoch 79 is done
epoch 80 is done
epoch 81 is done
epoch 82 is done
epoch 83 is done
epoch 84 is done
epoch 85 is done
epoch 86 is done
epoch 87 is done
epoch 88 is done
epoch 89 is done
epoch 90 is done
epoch 91 is done
epoch 92 is done
epoch 93 is done
epoch 94 is done
epoch 95 is done
epoch 96 is done
epoch 97 is done
epoch 98 is done
epoch 99 is done
epoch 100 is done
epoch 101 is done
epoch 102 is done
epoch 103 is done
epoch 104 is done
epoch 105 is done
epoch 106 is done
epoch 107 is done
epoch 108 is done
epoch 109 is done
epoch 110 is done
epoch 111 is done
epoch 112 is done
epoch 113 is done
epoch 114 is done
epoch 115 is done
epoch 116 is done
epoch 117 is done
epoch 118 is done
epoch 119 is done
epoch 120 is done
epoch 121 is done
epoch 122 is done
epoch 123 is done
epoch 124 is done
epoch 125 is done
epoch 126 is done
epoch 127 is done
epoch 128 is done
epoch 129 is done
epoch 130 is done
epoch 131 is done
epoch 132 is done
epoch 133 is done
epoch 134 is done
epoch 135 is done
epoch 136 is done
epoch 137 is done
epoch 138 is done
epoch 139 is done
epoch 140 is done
epoch 141 is done
epoch 142 is done
epoch 143 is done
epoch 144 is done
epoch 145 is done
epoch 146 is done
epoch 147 is done
epoch 148 is done
epoch 149 is done
epoch 150 is done
epoch 151 is done
epoch 152 is done
epoch 153 is done
epoch 154 is done
epoch 155 is done
epoch 156 is done
epoch 157 is done
epoch 158 is done
epoch 159 is done
epoch 160 is done
epoch 161 is done
epoch 162 is done
epoch 163 is done
epoch 164 is done
epoch 165 is done
epoch 166 is done
epoch 167 is done
epoch 168 is done
epoch 169 is done
epoch 170 is done
epoch 171 is done
epoch 172 is done
epoch 173 is done
epoch 174 is done
epoch 175 is done
epoch 176 is done
epoch 177 is done
epoch 178 is done
epoch 179 is done
epoch 180 is done
epoch 181 is done
epoch 182 is done
epoch 183 is done
epoch 184 is done
epoch 185 is done
epoch 186 is done
epoch 187 is done
epoch 188 is done
epoch 189 is done
epoch 190 is done
epoch 191 is done
epoch 192 is done
epoch 193 is done
epoch 194 is done
epoch 195 is done
epoch 196 is done
epoch 197 is done
epoch 198 is done
epoch 199 is done
epoch 200 is done
epoch 201 is done
epoch 202 is done
epoch 203 is done
epoch 204 is done
epoch 205 is done
epoch 206 is done
epoch 207 is done
epoch 208 is done
epoch 209 is done
epoch 210 is done
epoch 211 is done
epoch 212 is done
epoch 213 is done
epoch 214 is done
epoch 215 is done
epoch 216 is done
epoch 217 is done
epoch 218 is done
epoch 219 is done
epoch 220 is done
epoch 221 is done
epoch 222 is done
epoch 223 is done
epoch 224 is done
epoch 225 is done
epoch 226 is done
epoch 227 is done
epoch 228 is done
epoch 229 is done
epoch 230 is done
epoch 231 is done
epoch 232 is done
epoch 233 is done
epoch 234 is done
epoch 235 is done
epoch 236 is done
epoch 237 is done
epoch 238 is done
epoch 239 is done
epoch 240 is done
epoch 241 is done
epoch 242 is done
epoch 243 is done
epoch 244 is done
epoch 245 is done
epoch 246 is done
epoch 247 is done
epoch 248 is done
epoch 249 is done
epoch 250 is done
epoch 251 is done
epoch 252 is done
epoch 253 is done
epoch 254 is done
epoch 255 is done
epoch 256 is done
epoch 257 is done
epoch 258 is done
epoch 259 is done
epoch 260 is done
epoch 261 is done
epoch 262 is done
epoch 263 is done
epoch 264 is done
epoch 265 is done
epoch 266 is done
epoch 267 is done
epoch 268 is done
epoch 269 is done
epoch 270 is done
epoch 271 is done
epoch 272 is done
epoch 273 is done
epoch 274 is done
epoch 275 is done
epoch 276 is done
epoch 277 is done
epoch 278 is done
epoch 279 is done
epoch 280 is done
epoch 281 is done
epoch 282 is done
epoch 283 is done
epoch 284 is done
epoch 285 is done
epoch 286 is done
epoch 287 is done
epoch 288 is done
epoch 289 is done
epoch 290 is done
epoch 291 is done
epoch 292 is done
epoch 293 is done
epoch 294 is done
epoch 295 is done
epoch 296 is done
epoch 297 is done
epoch 298 is done
epoch 299 is done
epoch 300 is done
epoch 301 is done
epoch 302 is done
epoch 303 is done
epoch 304 is done
epoch 305 is done
epoch 306 is done
epoch 307 is done
epoch 308 is done
epoch 309 is done
epoch 310 is done
epoch 311 is done
epoch 312 is done
epoch 313 is done
epoch 314 is done
epoch 315 is done
epoch 316 is done
epoch 317 is done
epoch 318 is done
epoch 319 is done
epoch 320 is done
epoch 321 is done
epoch 322 is done
epoch 323 is done
epoch 324 is done
epoch 325 is done
epoch 326 is done
epoch 327 is done
epoch 328 is done
epoch 329 is done
epoch 330 is done
epoch 331 is done
epoch 332 is done
epoch 333 is done
epoch 334 is done
epoch 335 is done
epoch 336 is done
epoch 337 is done
epoch 338 is done
epoch 339 is done
epoch 340 is done
epoch 341 is done
epoch 342 is done
epoch 343 is done
epoch 344 is done
epoch 345 is done
epoch 346 is done
epoch 347 is done
epoch 348 is done
epoch 349 is done
epoch 350 is done
epoch 351 is done
epoch 352 is done
epoch 353 is done
epoch 354 is done
epoch 355 is done
epoch 356 is done
epoch 357 is done
epoch 358 is done
epoch 359 is done
epoch 360 is done
epoch 361 is done
epoch 362 is done
epoch 363 is done
epoch 364 is done
epoch 365 is done
epoch 366 is done
epoch 367 is done
epoch 368 is done
epoch 369 is done
epoch 370 is done
epoch 371 is done
epoch 372 is done
epoch 373 is done
epoch 374 is done
epoch 375 is done
epoch 376 is done
epoch 377 is done
epoch 378 is done
epoch 379 is done
epoch 380 is done
epoch 381 is done
epoch 382 is done
epoch 383 is done
epoch 384 is done
epoch 385 is done
epoch 386 is done
epoch 387 is done
epoch 388 is done
epoch 389 is done
epoch 390 is done
epoch 391 is done
epoch 392 is done
epoch 393 is done
epoch 394 is done
epoch 395 is done
epoch 396 is done
epoch 397 is done
epoch 398 is done
epoch 399 is done
epoch 400 is done
epoch 401 is done
epoch 402 is done
epoch 403 is done
epoch 404 is done
epoch 405 is done
epoch 406 is done
epoch 407 is done
epoch 408 is done
epoch 409 is done
epoch 410 is done
epoch 411 is done
epoch 412 is done
epoch 413 is done
epoch 414 is done
epoch 415 is done
epoch 416 is done
epoch 417 is done
epoch 418 is done
epoch 419 is done
epoch 420 is done
epoch 421 is done
epoch 422 is done
epoch 423 is done
epoch 424 is done
epoch 425 is done
epoch 426 is done
epoch 427 is done
epoch 428 is done
epoch 429 is done
epoch 430 is done
epoch 431 is done
epoch 432 is done
epoch 433 is done
epoch 434 is done
epoch 435 is done
epoch 436 is done
epoch 437 is done
epoch 438 is done
epoch 439 is done
epoch 440 is done
epoch 441 is done
epoch 442 is done
epoch 443 is done
epoch 444 is done
epoch 445 is done
epoch 446 is done
epoch 447 is done
epoch 448 is done
epoch 449 is done
epoch 450 is done
epoch 451 is done
epoch 452 is done
epoch 453 is done
epoch 454 is done
epoch 455 is done
epoch 456 is done
epoch 457 is done
epoch 458 is done
epoch 459 is done
epoch 460 is done
epoch 461 is done
epoch 462 is done
epoch 463 is done
epoch 464 is done
epoch 465 is done
epoch 466 is done
epoch 467 is done
epoch 468 is done
epoch 469 is done
epoch 470 is done
epoch 471 is done
epoch 472 is done
epoch 473 is done
epoch 474 is done
epoch 475 is done
epoch 476 is done
epoch 477 is done
epoch 478 is done
epoch 479 is done
epoch 480 is done
epoch 481 is done
epoch 482 is done
epoch 483 is done
epoch 484 is done
epoch 485 is done
epoch 486 is done
epoch 487 is done
epoch 488 is done
epoch 489 is done
epoch 490 is done
epoch 491 is done
epoch 492 is done
epoch 493 is done
epoch 494 is done
epoch 495 is done
epoch 496 is done
epoch 497 is done
epoch 498 is done
epoch 499 is done
epoch 500 is done
epoch 501 is done
epoch 502 is done
epoch 503 is done
epoch 504 is done
epoch 505 is done
epoch 506 is done
epoch 507 is done
epoch 508 is done
epoch 509 is done
epoch 510 is done
epoch 511 is done
epoch 512 is done
epoch 513 is done
epoch 514 is done
epoch 515 is done
epoch 516 is done
epoch 517 is done
epoch 518 is done
epoch 519 is done
epoch 520 is done
epoch 521 is done
epoch 522 is done
epoch 523 is done
epoch 524 is done
epoch 525 is done
epoch 526 is done
epoch 527 is done
epoch 528 is done
epoch 529 is done
epoch 530 is done
epoch 531 is done
epoch 532 is done
epoch 533 is done
epoch 534 is done
epoch 535 is done
epoch 536 is done
epoch 537 is done
epoch 538 is done
epoch 539 is done
epoch 540 is done
epoch 541 is done
epoch 542 is done
epoch 543 is done
epoch 544 is done
epoch 545 is done
epoch 546 is done
epoch 547 is done
epoch 548 is done
epoch 549 is done
epoch 550 is done
epoch 551 is done
epoch 552 is done
epoch 553 is done
epoch 554 is done
epoch 555 is done
epoch 556 is done
epoch 557 is done
epoch 558 is done
epoch 559 is done
epoch 560 is done
epoch 561 is done
epoch 562 is done
epoch 563 is done
epoch 564 is done
epoch 565 is done
epoch 566 is done
epoch 567 is done
epoch 568 is done
epoch 569 is done
epoch 570 is done
epoch 571 is done
epoch 572 is done
epoch 573 is done
epoch 574 is done
epoch 575 is done
epoch 576 is done
epoch 577 is done
epoch 578 is done
epoch 579 is done
epoch 580 is done
epoch 581 is done
epoch 582 is done
epoch 583 is done
epoch 584 is done
epoch 585 is done
epoch 586 is done
epoch 587 is done
epoch 588 is done
epoch 589 is done
epoch 590 is done
epoch 591 is done
epoch 592 is done
epoch 593 is done
epoch 594 is done
epoch 595 is done
epoch 596 is done
epoch 597 is done
epoch 598 is done
epoch 599 is done
In [47]:
plt.plot(list(range(600)),training_loss)
Out[47]:
[<matplotlib.lines.Line2D at 0x7f71c0771240>]
In [48]:
s, sr=librosa.load('test_x_01.wav', sr=None)
X_t1=librosa.stft(s, n_fft=1024, hop_length=512)
xt1=librosa.stft(s, n_fft=1024, hop_length=512)
sa, sr=librosa.load('test_x_02.wav', sr=None)
X_t2=librosa.stft(sa, n_fft=1024, hop_length=512)
xt2=librosa.stft(sa, n_fft=1024, hop_length=512)
In [49]:
def test_model(x):
  with torch.no_grad():
    out=cnn_model2.Forward_prop(x)
  return out
In [50]:
#reconstruction

def rec(dirty):
  sig,srate=librosa.load(dirty,sr=None)
  di=librosa.stft(sig, n_fft=1024, hop_length=512)
  di_abs=np.abs(di)
  di_t=torch.tensor(frames_creation(np.transpose(di_abs))).cuda()
  di_out=test_model(di_t)
  fill=[0 for i in range(513)]
  si_f=np.array([fill]*19)
  recons_in=np.concatenate((si_f,di_out.cpu().numpy()))
  recons=(di.T/np.abs(di.T))*recons_in
  recr_sig=librosa.istft(recons.T, hop_length=512, length =len(sig))
  return recr_sig
In [51]:
train=rec('train_dirty_male.wav')
In [52]:
librosa.output.write_wav('train_recons.wav', train, srate)
In [53]:
ipd.Audio('train_recons.wav')
Out[53]:
In [54]:
test1=rec('test_x_01.wav')
In [55]:
librosa.output.write_wav('test1_recons.wav', test1, sr)
In [56]:
ipd.Audio('test1_recons.wav')
Out[56]:
In [57]:
test2=rec('test_x_02.wav')
In [58]:
librosa.output.write_wav('test2_recons.wav', test2, sr)
In [59]:
ipd.Audio('test2_recons.wav')
Out[59]:
In [60]:
def SNR(cs, ds):
  cs,sr=librosa.load(cs, sr=None)
  ds,sr=librosa.load(ds, sr=None)
  A=np.dot(cs, cs.T)
  B=np.dot(cs-ds,(cs-ds).T)
  s=A/B
  snr=10*(math.log10(s))  
  return snr
In [61]:
SNR('train_dirty_male.wav', 'train_recons.wav')
Out[61]:
6.927975027252038

Some formulae used:

  1. First input 'Image'
\begin{equation} \left|\boldsymbol{S}_{:, t+19}^{\top}\right| \approx \mathcal{F}_{\mathrm{CNN}}\left(\left|\boldsymbol{X}_{:, t: t+19}^{\top}\right|\right) \end{equation}
  1. Second input 'Image'(shifted by a frame)
\begin{equation} \left|\boldsymbol{S}_{:, t+20}^{\top}\right| \approx \mathcal{F}_{\mathrm{CNN}}\left(\left|\boldsymbol{X}_{:, t+1: t+20}^{\top}\right|\right) \end{equation}
  1. SNR Calculation is the same
In [ ]: